[iOS][小ネタ] 地図アプリ作成時に役に立ちそうな MKMapView の 目的別実装例
はじめに
本記事では MKMapView (iOS 組み込みの地図 UI)を使ったアプリを作る際に役に立ちそうな実装の例を紹介します。
環境
- OS X 10.10.5(14F27)
- Xcode Version 6.4 (6E35b)
- development target: iOS 8.4
コンビニや公共施設などの情報を MKMapView から消したい
MKMapView の showsPointsOfInterest プロパティを NO にします。コードでも Storyboard でも設定できます。
showsPointsOfInterest = YES の場合は以下のような表示になります。
showsPointsOfInterest = NO の場合は以下のような表示になります。
MKMapView で表示中の注釈(アノテーション)オブジェクトを取得したい
MKMapView の visibleMapRect プロパティを使用すれば、地図の表示領域を表す MKMapRect を取得できます。
また、MKMapView の annotationsInMapRect: メソッドを使用すれば、指定した範囲 (MKMapRect) の注釈オブジェクトを取得できます。
- (NSArray *)visibleAnnotations { MKMapRect visibleMapRect = self.mapView.visibleMapRect; NSSet *visibleAnnotationSet = [self.mapView annotationsInMapRect:visibleMapRect]; return visibleAnnotationSet.allObjects; }
ユーザーの現在位置を MKMapView 上に表示したい
MKMapView の 設定を変更
MKMapView の showsUserLocation プロパティを YES にします。コードでも Storyboard でも設定できます。
Info.plist に Key と Value を追加する
位置情報を使用する目的を指定するための Key と Value を Info.plist に追加します。
以下のどちらかの Key を追加します。
- NSLocationWhenInUseUsageDescription
- アプリの使用中のみ許可
- NSLocationAlwaysUsageDescription
- 常に許可
Value には位置情報の使用目的を記述します。ここで指定した文字列は許可を求めるアラート上に表示されます。
以下の例では、アプリの使用中のみ許可してもらうための NSLocationWhenInUseUsageDescription を指定しています。
NSLocationWhenInUseUsageDescription ユーザーの位置をMKMapView上に表示します。
CLLocationManager のメソッドを使用して位置情報使用許可をリクエストする
CLLocationManager には以下の2つのメソッドが用意されています。どちらかのメソッドを使用して許可を要求します。
- requestWhenInUseAuthorization
- アプリの使用中のみ許可してもらうよう要求
- requestAlwaysAuthorization
- 常に許可してもらうよう要求
#import "ViewController.h" @import MapKit; @interface ViewController () @property (weak, nonatomic) IBOutlet MKMapView *mapView; @property (nonatomic) CLLocationManager *locationManager; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.locationManager = [CLLocationManager new]; [self.locationManager requestWhenInUseAuthorization]; }
動作を確認する
許可を要求をしたタイミングで、以下のようなアラートが表示されます。
「許可」を選択すると、MKMapView 上にユーザー位置が表示されます。
参考記事
まとめ
以上、MKMapView に関する小ネタ集でした。